useLayoutEffect
React에서 useLayoutEffect
훅은 컴포넌트의 레이아웃이 변하기 전에 실행되어야 하는 작업을 처리할 때 사용됩니다. 일반적으로 DOM이 업데이트된 후에 실행되는 useEffect
와 달리, useLayoutEffect
는 DOM 변경 후, 그리기 전에 실행됩니다. 이로 인해 DOM의 일관성을 유지하고, 레이아웃이나 UI의 깜빡임을 방지할 수 있습니다.
useLayoutEffect
를 사용하는 이유
useLayoutEffect
는 화면에 렌더링 되기 전에 실행되므로, DOM 조작이 필요한 경우에 유용합니다. 예를 들어, DOM 요소의 크기나 위치를 측정하고, 이를 기반으로 스타일을 조정해야 할 때 사용됩니다.
다음은 간단한 예제입니다. 이 예제에서는 DOM 요소의 크기를 측정하고 이를 상태에 저장하여 렌더링에 반영하는 방법을 보여줍니다.
import React, { useState, useLayoutEffect, useRef } from 'react';
function MeasureExample() {
const [boxSize, setBoxSize] = useState({ width: 0, height: 0 });
const boxRef = useRef(null);
useLayoutEffect(() => {
if (boxRef.current) {
const { width, height } = boxRef.current.getBoundingClientRect();
setBoxSize({ width, height });
}
}, []);
return (
<div>
<div ref={boxRef} style={{ width: '100px', height: '100px', backgroundColor: 'lightblue' }}>
Measure this box
</div>
<p>Box width: {boxSize.width}px</p>
<p>Box height: {boxSize.height}px</p>
</div>
);
}
export default MeasureExample;